
import ar.com.binarit.Person
import ar.com.binarit.Role
import ar.com.binarit.entities.Concepto
import ar.com.binarit.entities.Division
import ar.com.binarit.entities.Equipo
import ar.com.binarit.entities.Estado
import ar.com.binarit.entities.EstadoPago
import ar.com.binarit.entities.Pais
import ar.com.binarit.entities.ParametrosSistema
import ar.com.binarit.entities.TipoDocumento
import ar.com.binarit.entities.TipoEvento
import ar.com.binarit.entities.TipoPago
import ar.com.binarit.entities.TipoUsuario

class BootStrap {

    def init = { servletContext ->
		
		if (Role.count()==0){
			new Role(authority: 'ROLE_ADMIN', description: 'Admin role').save(flush: true, failOnError: true)
			new Role(authority: 'ROLE_FACEBOOK', description: 'Admin role').save(flush: true, failOnError: true)
			new Role(authority: 'ROLE_USER', description: 'Admin role').save(flush: true, failOnError: true)
		}
		
		if (TipoUsuario.count()==0){
			new TipoUsuario(descripcion: TipoUsuario.ADMINISTRADOR, version: 0).save(flush: true, failOnError: true)
			new TipoUsuario(descripcion: TipoUsuario.MODERADOR, version: 0).save(flush: true, failOnError: true)
			new TipoUsuario(descripcion: TipoUsuario.NORMAL, version: 0).save(flush: true, failOnError: true)
		}
		
		if (TipoEvento.count()==0){
			new TipoEvento(descripcion: TipoEvento.ALTA_USUARIO, opcional: true).save(flush: true, failOnError: true)
			new TipoEvento(descripcion: TipoEvento.NUEVO_VIAJE, opcional: true).save(flush: true, failOnError: true)
		}
		
		if (Estado.count()==0){
			new Estado(descripcion: Estado.ABIERTO, version: 0).save(flush: true, failOnError: true)
			new Estado(descripcion: Estado.CERRADO, version: 0).save(flush: true, failOnError: true)
		}
		
		if (Person.count()==0){
			crearUsuarios()
		}
		
		if(ParametrosSistema.count()==0){
			new ParametrosSistema(cantidadUsuariosDestacados: 10, mubbiasPorConcretar: 5, mubbiasCerradas: 5).save(flush: true, failOnError: true)
		}
		
		if (EstadoPago.count()==0){
			new EstadoPago(descripcion: EstadoPago.APROBADO, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.PENDIENTE, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.EN_PROCESO, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.RECHAZADO, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.DEVUELTO, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.CANCELADO, version: 0).save(flush: true, failOnError: true)
			new EstadoPago(descripcion: EstadoPago.EN_MEDIACION, version: 0).save(flush: true, failOnError: true)
		}
		
		if (TipoPago.count()==0){
			new TipoPago(descripcion: TipoPago.TARJETA, version: 0).save(flush: true, failOnError: true)
			new TipoPago(descripcion: TipoPago.TRANSFERENCIA_BANCARIA, version: 0).save(flush: true, failOnError: true)
			new TipoPago(descripcion: TipoPago.CUENTA, version: 0).save(flush: true, failOnError: true)
			new TipoPago(descripcion: TipoPago.TICKET, version: 0).save(flush: true, failOnError: true)
		}
		
		if (TipoDocumento.count() == 0) {
			new TipoDocumento(descripcion: "DU").save(failOnError: true)
			new TipoDocumento(descripcion: "CUIT").save(failOnError: true)
			new TipoDocumento(descripcion: "CUIL").save(failOnError: true)
		}
		
		if (Concepto.count() == 0) {
			new Concepto(descripcion: "Pago de viaje").save(failOnError: true)
			new Concepto(descripcion: "Deuda").save(failOnError: true)
		}
		
//		crearEquipos()
    }
    def destroy = {
    }
	
	def crearUsuarios(){
//		new Person(email:"nicolas.eliaschev@gmail.com", username:"nikuelias", password:"nicolas",
//			nickname:"Nico CEO", tipoUsuario: TipoUsuario.administrador(), version: 0, enabled: true,
//			imgAvatar: "https://twimg0-a.akamaihd.net/profile_images/2909011660/0db5c60b05f09d1941217e8c2811d03e.png").save(flush: true, failOnError: true)
	}
	
	def crearEquipos(){
		def pais
		def divisionPrimeraA
		def divisionBNacional
		
		if (Pais.count() == 0) {
			pais = new Pais(descripcion: "Argentina").save(failOnError: true)
		}
		
		if (Division.count() == 0) {
			divisionPrimeraA = new Division(descripcion: "Primera A", pais: pais).save(failOnError: true)
			divisionBNacional = new Division(descripcion: "B Nacional", pais: pais).save(failOnError: true)
		}
		
		if (Equipo.count() == 0) {
			new Equipo(nombre: "Boca", direccion:"Brandsen 805, Capital Federal, Argentina", posicionGeografica:"-34.636631,-58.364742", apodoDeLaCancha:"La Bombonera", escudo:"http://www.soyboca.com.ar/images/escudos/boca.png", division: divisionPrimeraA).save(failOnError: true)
			new Equipo(nombre: "River", direccion:"Acceso A Pres. Figueroa Alcorta 7597, Buenos Aires, Argentina", posicionGeografica:"-34.546666,-58.449468 ", apodoDeLaCancha:"El Monumental", escudo:"http://www.soyboca.com.ar/images/escudos/riverplate.png", division: divisionPrimeraA).save(failOnError: true)
			new Equipo(nombre: "Independiente", direccion:"Enrique Ricardo Bochini 751, Avellaneda, Buenos Aires, Argentina", posicionGeografica:"-34.546666,-58.449468 ", apodoDeLaCancha:"El Libertadores de America", escudo:"http://www.soyboca.com.ar/images/escudos/independiente.png", division: divisionPrimeraA).save(failOnError: true)
			new Equipo(nombre: "Velez", direccion:"	Avenida Juan B. Justo 9200, Capital Federal, Argentina", posicionGeografica:"-34.546666,-58.449468 ", apodoDeLaCancha:"Jose Amalfitani", escudo:"http://www.soyboca.com.ar/images/escudos/velezsarfield.png", division: divisionPrimeraA).save(failOnError: true)
		}
		
		if (divisionPrimeraA && divisionBNacional){
			pais = pais.divisiones.add(divisionPrimeraA)
			pais = pais.divisiones.add(divisionBNacional)
			pais.save(failOnError: true)
		}
	}
	
	
}
